package special_class.oj;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/9/21 19:30
 */
public class Test {
    public static int StrToInt(String str ){
        //1.边界条件的判断
        if(str==null||str.length()==0){
            return 0;
        }
        //2.出现负数怎么处理
        //引入标志位辅助变量
        //我将str中所有的内容看作正整数处理，最终*flag即可
        int flag = 1;
        //str 中的内容可能超出int的范围，因此采用long来处理
        long ret = 0;
        //遍历str字符串
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            //首先判断首个字符的情况，到底是正数还是负数
            if(i==0&&c=='-'){
                flag = -1;
            }else if (i==0&&c=='+'){
                continue;
            }else {
                //判断是否是合法字符
                if(!Character.isDigit(c)){
                    //找到反例
                    return 0;
                }else {
                    //将“123”-->1
                    //1是最高位，还得使得1为100
                    //2是次高位，使得2为20
                    //这里有个边界条件，“123”长度为3，不断 x str.length()-i-1;如果是“-123”则不可行
                    //1234 1变1000 相当于连着*10*10*10
                    //ret = 0 => ret = 1 => ret = 10+2 = 12 => ret = 120+3 =123 => ret = 1230+4 = 1234;
                    ret = ret*10 +(c-'0');
                }
            }
        }

        ret = ret * flag;
        return (int)ret;
    }

    public static void main(String[] args) {
        char c = '1';
        //字符‘1’和字符‘0’刚好差一个单位，这一个单位恰好是数字1
        int num1 = c-'0';
        int num = c;
        System.out.println(num);//49
        System.out.println(num1);//1

        String str = "+1234";
        String str1 = "-1234";
        String str2 = "a1s234";
        System.out.println(StrToInt(str ));
        System.out.println(StrToInt(str1 ));
        System.out.println(StrToInt(str2));
//        System.out.println(StrToInt(str3 ));

    }
}
